/**
*  
* @Function 消息服务 
* @ProjectName credit-data-xypj 
* @PackageName com.py.credit.service.impl    
* @FileName MsgServiceImpl.java    
* @Date 2018年12月14日下午5:47:42
* @Author Min DongXv
* @Copyright (c) 2018, 金电联行 All Rights Reserved.   
*   
*/
package com.py.credit.service.impl;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import com.py.credit.dao.SysMsgDao;
import com.py.credit.entity.MsgRecordEntity;
import com.py.credit.entity.SysMsgDetailEntity;
import com.py.credit.entity.SysMsgEntity;
import com.py.credit.service.MsgService;
import com.py.framework.core.common.Page;
import com.py.framework.core.common.Pagination;

/**
 * 
 * @Function 消息服务
 * @ClassName MsgServiceImpl
 * @Date 2018年12月14日 下午5:47:42
 * @Author Min DongXv
 * 
 */
@Service
public class MsgServiceImpl implements MsgService {

	private static final int NUMBER_ONE = 1;

	@Autowired
	private SysMsgDao sysMsgDao;

	/**
	 * 
	 *
	 * @Function 获取消息列表
	 * @FileName MsgServiceImpl.java
	 * @MethodName queryMsgRecord
	 * @param msgId
	 *            消息ID
	 * @param userId
	 *            用户ID
	 * @param msgStatus
	 *            消息状态
	 * @param page
	 * @return
	 * @Date 2018年12月17日 上午9:57:22
	 * @Author Min DongXv
	 *
	 */
	@Override
	public List<Map<String, Object>> queryMsgRecordByPage(Long msgId, Long userId, Integer msgStatus, Page page) {
		return sysMsgDao.queryMsgRecordByPage(msgId, userId, msgStatus, page);
	}

	/**
	 * 
	 *
	 * @Function 最近5条消息
	 * @FileName MsgServiceImpl.java
	 * @MethodName queryMsgRecord
	 * @param userId
	 *            用户ID
	 * @return
	 * @Date 2018年12月17日 上午9:59:50
	 * @Author Min DongXv
	 *
	 */
	@Override
	public List<Map<String, Object>> queryMsgRecord(long userId) {
		return sysMsgDao.queryMsgRecord(userId);
	}

	/**
	 * 
	 *
	 * @Function 消息详情
	 * @FileName MsgServiceImpl.java
	 * @MethodName findOneMsg
	 * @param id
	 *            消息ID
	 * @return
	 * @Date 2018年12月17日 上午10:00:56
	 * @Author Min DongXv
	 *
	 */
	@Override
	public SysMsgEntity findOneMsg(long id) {
		return sysMsgDao.findOneMsg(id);
	}

	/**
	 * 
	 *
	 * @Function 新增消息
	 * @FileName MsgServiceImpl.java
	 * @MethodName addMsgInfo
	 * @param entity
	 * @return
	 * @Date 2018年12月17日 上午10:02:08
	 * @Author Min DongXv
	 *
	 */
	@Override
	@Transactional(rollbackFor = Exception.class)
	public void addMsgInfo(SysMsgEntity entity) {
		Timestamp ts = new Timestamp(System.currentTimeMillis());
		entity.setUpdateTime(ts);
		entity.setCreateTime(ts);
		entity.setDelFlag(NUMBER_ONE);
		if (entity.getMsgType() == 0) {
			entity.setMsgType(NUMBER_ONE);
		}
		// 新增消息主体
		sysMsgDao.addMsgInfo(entity);
		List<SysMsgDetailEntity> details = entity.getDetails();
		if (!CollectionUtils.isEmpty(details)) {
			List<MsgRecordEntity> records = new ArrayList<>();
			MsgRecordEntity record = null;
			List<MsgRecordEntity> msgRds = null;
			for (SysMsgDetailEntity detail : details) {
				detail.setCreateTime(ts);
				detail.setUpdateTime(ts);
				detail.setDelFlag(NUMBER_ONE);
				detail.setMsgId(entity.getId());
				// 添加详情信息
				sysMsgDao.addMsgDetailInfo(detail);
			}
			for (SysMsgDetailEntity detail : details) {
				record = new MsgRecordEntity();
				record.setMsgId(entity.getId());
				record.setMsgDetailId(detail.getId());
				record.setRecieveId(detail.getReviever());
				record.setMsgStatus(detail.getRevieveType());
				record.setCreateTime(ts);
				record.setUpdateTime(ts);
				record.setDelFlag(NUMBER_ONE);
				records.add(record);
			}
			if (!CollectionUtils.isEmpty(records)) {
				Pagination page = new Pagination(1000, records.size());
				for (int i = 0; i < page.getPageCount(); i++) {
					if (page.getToIndex() > records.size()) {
						msgRds = records.subList(page.getFromIndex(), records.size());
					} else {
						msgRds = records.subList(page.getFromIndex(), page.getToIndex());
					}
					// 批量添加消息记录数据
					sysMsgDao.batchAddMsgRecordInfo(msgRds);
				}
			}
		}
	}

	/**
	 * 
	 *
	 * @Function 删除消息
	 * @FileName MsgServiceImpl.java
	 * @MethodName delMsg
	 * @param ids
	 * @Date 2018年12月17日 上午11:04:55
	 * @Author Min DongXv
	 *
	 */
	@Override
	public void delMsg(List<Long> ids) {
		Timestamp ts = new Timestamp(System.currentTimeMillis());
		Map<String, Object> params = new HashMap<>(2);
		params.put("ids", ids);
		params.put("updateTime", ts);
		sysMsgDao.batchDelMsg(params);
		// 批量删除消息详情
		sysMsgDao.batchDelMsgDetail(params);
		// 批量删除消息记录
		sysMsgDao.batchDelMsgRecord(params);
	}

	/**
	 * 
	 *
	 * @Function 更新消息状态
	 * @FileName MsgServiceImpl.java
	 * @MethodName updateMsgStatus
	 * @param status
	 * @param id
	 * @Date 2018年12月18日 下午6:04:04
	 * @Author Min DongXv
	 *
	 */
	@Override
	public void updateMsgStatus(Integer status, Long id) {
		sysMsgDao.updateMsgStatus(status, id);
	}
}
